function jsPassGen(id, syllableNum, numPass, useNums) {
	id = typeof(id) != 'undefined' ? id : 'jsPassGenForm';	// Default values
	syllableNum = typeof(syllableNum) != 'undefined' ? syllableNum : 3;
	numPass = typeof(numPass) != 'undefined' ? numPass : 10;
	useNums = typeof(useNums) != 'undefined' ? useNums : true;

	function rand(from, to) {
		from = typeof(from) != 'undefined' ? from : 0;	// Default
		to = typeof(to) != 'undefined' ? to : from + 1;	// values
		return Math.round(from + Math.random()*(to - from));
	};

	function getRandChar(a) {
		return a.charAt(rand(0,a.length-1));
	}

	var form = document.getElementById(id);
	var cCommon = "bcdfghklmnprstvz";	// Pretty for upcase
	var cAll = cCommon + "jqwx";	// All consonants
	var vAll = "aeiouy";	// All vowels
	var lAll = cAll + vAll;	// All letters

	form.innerHTML = "";
	for(var j = 0; j < numPass; ++j) {
		var numProb = 0, numProbStep = 0.25;	// Number probability between syllable
		for(var i = 0; i < syllableNum; ++i) {
			if(Math.round(Math.random())) {
				form.innerHTML += getRandChar(cCommon).toUpperCase() +
									getRandChar(vAll) +
									getRandChar(lAll);
			} else {
				form.innerHTML += getRandChar(vAll).toUpperCase() + 
									getRandChar(cCommon);
			}
			if(useNums && Math.round(Math.random() + numProb)) {
				form.innerHTML += rand(0,9);
				numProb += numProbStep;
			}
		}
		form.innerHTML += "<br />";
	}
	return false;
}